$(function(){
	//####################
	//# Einrichten
	//####################
	
	// Prüft auf falsche Eingabe
	$(".einrichtenfrom").submit(function() {
		var prosa = ($(".einrichtenfrom input[name=prosa]").attr("checked") == "checked");
		var felder = ($(".einrichtenfrom .name").attr("type") == "text");
		var verantwortlich = ($(".einrichtenfrom .verant option:selected").val() != undefined);
		var redakteur = ($(".einrichtenfrom .redak option:selected").val() != undefined);
		if( (prosa || felder) && verantwortlich && redakteur) {
			return true;
		} else if( !prosa && !felder && !verantwortlich && !redakteur ) {
			return true;
		} else {
			if(redakteur == verantwortlich) {
				alert("Ungültige Eingabe: \nEs wurden "+((prosa||felder)?"":"keine ")+"Felder, aber "+((redakteur||verantwortlich)?"":"keine ")+"zuständige Personen gefunden.");
			} else {
				alert("Ungültige Eingabe: \nEs wurden "+((redakteur)?"":"keine ")+"Redakteure, aber "+((verantwortlich)?"":"keine ")+"Verantwortlichen gefunden.");
			}
		}
		return false;
	});

	
	// Feld hinzufügen
	var counter = 0;
	$(".feldhinzufuegen").click(function(){
		$(".table-einrichten").append('<tr>	<td class="table-einrichten-td-name"><input type="hidden" name = "id" value = "-1"><input name = "name" class="name" type="text" value=""></td><td class="table-einrichten-td-typ"><select size="1" style="width: 150px" name="typ" class="typ" ><option selected value="0">Einzeiliger Text</option><option value="1">Mehrzeiliger Text</option><option value="2">Zahl</option></select></td><td><input type="checkbox" class="dez" type="checkbox" onchange="if($(this).attr(\'checked\')) {$(\'.change'+counter+'\').val(\'1\');} else {$(\'.change'+counter+'\').val(\'0\');}"><input class="change'+counter+'" type="hidden" value="0" name="dezernat2" /></td><td style="text-align:left"><a class="button-input einrichtenup" style="margin-left: 5px; padding: 2px 7px 2px 7px" href="#"><img src="css/img/arrow_up.gif"></a><a class="button-input einrichtendown"style="margin-left: 5px; padding: 2px 7px 2px 7px" href="#"><img src="css/img/arrow_down.gif"></a><a class="button-input" onclick="$(this).parent().parent().remove(); return false;" style="margin-left: 5px; padding: 2px 7px 2px 7px" href="#"><img src="css/img/minus.gif"></a></td></tr>');
		$(".einrichtenup").unbind("click");
		$(".einrichtenup").click(einrichtenUpFunc);
		$(".einrichtenup").click(einrichtenDownFunc);
		return false;
	});
	
	// Standardtemplate laden.
	$(".standarteinrichtung").click(function() {
		if(confirm("Das Laden des Standards führt zu dem Verlust der aktuellen Felder.")) {
			$.get("template/standardeinrichten.html", function(data) {
				$(".table-einrichten").html(data);
				$(".einrichtenup").click(einrichtenUpFunc);
				$(".einrichtendown").click(einrichtenDownFunc);
			});
		}
		return false;
	});
	
	// Verschieben der Felder
	$(".einrichtenup").click(einrichtenUpFunc);	
	function einrichtenUpFunc(){
		var num = $(this).parent().parent().index();
		var temp1 = $(this).parent().parent().html();
		var temp2 = $(".table-einrichten tr:nth-child("+(num)+")").html();
		var temp1val = $(this).parent().parent().find('.name').val();
		var temp1typ = $(this).parent().parent().find('.typ').val();
		var temp1dez = $(this).parent().parent().find('.dez').attr('checked') == "checked";
		var temp2val = $(".table-einrichten tr:nth-child("+(num)+")").find('.name').val();
		var temp2typ = $(".table-einrichten tr:nth-child("+(num)+")").find('.typ').val();
		var temp2dez = $(".table-einrichten tr:nth-child("+(num)+")").find('.dez').attr('checked')=="checked";
		$(this).parent().parent().html(temp2);
		$(".table-einrichten tr:nth-child("+(num)+")").html(temp1);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".name").val(temp2val);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".typ").val(temp2typ);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".dez").attr('checked', temp2dez);
		$(".table-einrichten tr:nth-child("+(num)+")").find(".name").val(temp1val);
		$(".table-einrichten tr:nth-child("+(num)+")").find(".typ").val(temp1typ);
		$(".table-einrichten tr:nth-child("+(num)+")").find(".dez").attr('checked', temp1dez);
		$(".einrichtenup").unbind("click");
		$(".einrichtenup").click(einrichtenUpFunc);
		$(".einrichtendown").click(einrichtenDownFunc);
		return false;
	}
	
	// Verschieben der Felder
	$(".einrichtendown").click(einrichtenDownFunc);	
	function einrichtenDownFunc(){
		var num = $(this).parent().parent().index();
		var temp1 = $(this).parent().parent().html();
		var temp2 = $(".table-einrichten tr:nth-child("+(num+2)+")").html();
		var temp1val = $(this).parent().parent().find('.name').val();
		var temp1typ = $(this).parent().parent().find('.typ').val();
		var temp1dez = $(this).parent().parent().find('.dez').attr('checked') == "checked";
		var temp2val = $(".table-einrichten tr:nth-child("+(num+2)+")").find('.name').val();
		var temp2typ = $(".table-einrichten tr:nth-child("+(num+2)+")").find('.typ').val();
		var temp2dez = $(".table-einrichten tr:nth-child("+(num+2)+")").find('.dez').attr('checked') == "checked";
		$(this).parent().parent().html(temp2);
		$(".table-einrichten tr:nth-child("+(num+2)+")").html(temp1);
		$(".table-einrichten tr:nth-child("+(num+2)+")").find(".name").val(temp1val);
		$(".table-einrichten tr:nth-child("+(num+2)+")").find(".typ").val(temp1typ);
		$(".table-einrichten tr:nth-child("+(num+2)+")").find(".dez").attr('checked', temp1dez);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".name").val(temp2val);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".typ").val(temp2typ);
		$(".table-einrichten tr:nth-child("+(num+1)+")").find(".dez").attr('checked', temp2dez);
		$(".einrichtendown").unbind("click");
		$(".einrichtenup").click(einrichtenUpFunc);
		$(".einrichtendown").click(einrichtenDownFunc);
		return false;
	}
	
	//####################
	//# Benutzerliste
	//####################

	// Benutzer löschen
	$(".benutzerListeBenutzerLoeschen").click(function(){
		if(confirm('Möchten Sie den Benutzer wirklich löschen? Der Vorgang kann nicht rückgängig gemacht werden.')) {
			 $.post("BenutzerListe", { delBenutzerId: $(this).attr("mmsbenutzerid")});		 
			 $(this).parent().parent().remove();		 
		}
		return false;		 
					
	});
	//####################
	//# Baum
	//####################

	
	//Drag and Drop im Baum
	$("#draggable").draggable({
    	revert: true,
    	connectToDynatree: true,
    	cursorAt: { top: -5, left:-5 },
    	helper: "clone"
  	});
	$("#tree_admin").dynatree(dynconf);

});

// Prüft ob Zahl
function isNumber (o) {
	if(o == "") {
		return false;
	} else {
		return !isNaN (o-0);
	} 
}
// Wandelt Baum in JSON
function buildTree() {
	var tree = $("#tree_admin").dynatree("getTree");
	var td = tree.toDict();
	delJson(td.children);
	var json = JSON.stringify(td.children);
	return json;
}
// Löscht unnötigen JSON Code
function delJson(knoten) {
	jQuery.each(knoten, function(i, val) {
		delete knoten[i].isFolder;
		delete knoten[i].isLazy;
		delete knoten[i].tooltip;
		delete knoten[i].href;
		delete knoten[i].icon;
		delete knoten[i].noLink;
		delete knoten[i].activate;
		delete knoten[i].focus;
		delete knoten[i].expand;
		delete knoten[i].select;
		delete knoten[i].hideCheckbox;
		delete knoten[i].unselectable;
		delete knoten[i].key;
		if(typeof knoten[i].children != "undefined") {
			delJson(knoten[i].children);		
		}
	});
} 
     
// Alt Key für Links
var isKeyDown = false;
$(document).keydown(function(e) {
	if(e.altKey) isKeyDown = true;
});
$(document).keypress(function(e) {
	if(e.altKey) isKeyDown = true;
});
$(document).keyup(function(e) {
	if(e.altKey) isKeyDown = false;
});


function bindContextMenu(span) {
	$(span).contextMenu({menu: "myMenu"}, function(action, el, pos) {
		var node = $.ui.dynatree.getNode(el);
		knoten = (node.data.href.split("=")[1]);	
		if(node.getParent().data.href == null) {
			ueberelement = 1;
		} else {
			ueberelement = (node.getParent().data.href.split("=")[1]);
		}
		//alert(knoten+" "+ueberelement);
		
		$.post("Loeschen", {child:knoten, parent:ueberelement,test:"1"}).done(function(data) {
			if(data == "fehler") {
				alert("Unbekannter Fehler! Ebene konnte nicht gelöscht werden.");
			} else if(data != "") {
				if(confirm(data)) {
					$.post("Loeschen", {child:knoten, parent:ueberelement,test:"0"}).done(function(data) {
						window.location.replace("AufgabenListe");
					});
				}
			} else {
				if(confirm("Soll die Ebene entgültig gelöscht werden?\nAchtung: Der Vorgang kann nicht rückgängig gemacht werden.")) {
					$.post("Loeschen", {child:knoten, parent:ueberelement,test:"0"}).done(function(data) {
						window.location.replace("AufgabenListe");
					});
				}
			}
		});
		
	});
}




var id="";
var kinder;
var title="";
var dynconf = {
	persist:true,

	initAjax:{ url:"Baum.json" },
    onClick: function(node, event) {
    	if( $(".contextMenu:visible").length > 0 ){
    		$(".contextMenu").hide();
    	}
	},
	onCreate: function(node, span){
		bindContextMenu(span);
	},
	dnd:{
		onDragStart : function(node) {
			title = (node.data.title);
	        id = (node.data.addClass);
	        kinder = node.getChildren();
	        return true;
		},
		onDragStop : function(node) {},
		autoExpandMS : 1000,
		preventVoidMoves : true,
		onDragEnter : function(node, sourceNode) { return true; },
		onDragOver : function(node, sourceNode, hitMode) {
			if (node.isDescendantOf(sourceNode)) {
				return false;
			}
			if (!node.data.isFolder && hitMode === "over") {
				return "after";
			}
		},
		onDrop : function(node, sourceNode, hitMode, ui, draggable) {
			logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode);
			var copynode;
			if (sourceNode) {
				if(isKeyDown) {
        			sourceNode.copy(node, hitMode);        			
        		} else {
        			sourceNode.move(node, hitMode);
        		}
			} else {
				copynode = {
					title : "Neues Element"
				};
			}
			if (hitMode == "over") {
				node.addChild(copynode);
				node.expand(true);
			} else if (hitMode == "before") {
				node.parent.addChild(copynode, node);
			} else if (hitMode == "after") {
				node.parent.addChild(copynode, node.getNextSibling());
			}
			//$(".content").html(buildTree())
			
			$.post("Baum.json", {
				newBaum : buildTree()
			}).done(function(data) {
				if (data == null || data == "") {
					window.location.reload();
				} else if (isNumber(data)) {
					window.location.replace("Einrichten?ebenenId=" + data);
				} else {
					window.location.reload();
					alert(data);
				}
			});
			
		},
		onDragLeave : function(node, sourceNode) {
			logMsg("tree.onDragLeave(%o, %o)", node, sourceNode);
		}
	},
	onActivate : function(node) {
		if (node.data.href) {
			window.location = node.data.href;
		}
	}
};